﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using NUnit.Framework;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaEnlaceLogicoPensum
    {
        /// <summary>
        /// prueba del metodo en fachada consultarescuelapensum
        /// </summary>
        [Test]
        public void PruebaConsultarEscuelasVecinas()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            List<Escuela> escuelasVecinas = new List<Escuela>();
            escuelasVecinas = fachada.ConsultarEscuelasVecinas(1);
            Assert.IsNotNull(escuelasVecinas);
            Assert.IsInstanceOf(typeof(List<Escuela>), escuelasVecinas);
            
        }

        /// <summary>
        /// prueba del metodo en fachada ConsultarMateriasDeEscuela
        /// </summary>
        [Test]
        public void PruebaConsultarMateriasDeEscuela()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            List<Materia> MateriasDeEscuela = new List<Materia>();
            MateriasDeEscuela = fachada.ConsultarMateriasDeEscuela(1);
            Assert.IsNotNull(MateriasDeEscuela);
            Assert.IsInstanceOf(typeof(List<Materia>), MateriasDeEscuela);
        }

        /// <summary>
        /// prueba del metodo en fachada consultarescuelapensum
        /// </summary>
        [Test]
        public void PruebaCrearPensum()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum nuevoPensum = new Pensum();
            Pensum nuevoPensumFallo = new Pensum();
            nuevoPensum.IdEscuela = 1;
            nuevoPensum.StatusPensum = "DESACTIVADO";
            string fechaActual = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            DateTime fecha = Convert.ToDateTime(fechaActual);
            nuevoPensum.FechaInicio = fecha;
            int idPensum = 0;
            idPensum= fachada.CrearPensum(nuevoPensum);
            Assert.AreNotEqual(idPensum, 0);
            
        }

        /// <summary>
        /// prueba del metodo en fachada consultar pensum de escuela
        /// </summary>
        [Test]
        public void PruebaConsultaPensumsArchivadosDeEscuela()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Escuela escuela= new Escuela();
            Pensum pensum = new Pensum();
            escuela.IdEscuela =1;
            List<Pensum> pensumsArchivados = new List<Pensum>();
            pensumsArchivados = fachada.ConsultarPensumsArchivadosDeEscuela(escuela, 1);
            Assert.IsInstanceOf(typeof(List<Pensum>), pensumsArchivados);
            Assert.IsNotNull(pensumsArchivados);
            Assert.AreNotEqual(pensumsArchivados.Count, 0);
           
        }

        /// <summary>
        /// prueba del metodo en fachada consultare pensums inactivos
        /// </summary>
        [Test]
        public void PruebaConsultarPensumsInactivos()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Escuela escuela = new Escuela();
            escuela.IdEscuela = 1;
            List<Pensum> pensumsArchivados = new List<Pensum>();
            Pensum pensum = new Pensum();
            pensumsArchivados = fachada.ConsultarPensumsInactivosDeEscuela(escuela, 2);
            Assert.IsInstanceOf(typeof(List<Pensum>), pensumsArchivados);
            Assert.IsNotNull(pensumsArchivados);
            Assert.AreNotEqual(pensumsArchivados.Count, 0);
        }

        /// <summary>
        /// prueba del metodo en fachada insertar materia en pensum
        /// </summary>
        [Test]
        public void PruebaInsertarMateriaSemestre()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum pensum = new Pensum();
            Materia materia1 = new Materia();
            Materia materia2 = new Materia();
            pensum.IdPensum = 1;
            materia1.Codigo = 11;
            materia2.Codigo = 12;
            Prelacion prelacion1 = new Prelacion();
            Prelacion prelacion2 = new Prelacion();
            prelacion1.MiMateriaPensum = materia1;
            prelacion2.MiMateriaPensum = materia2;
            List<Prelacion> prelaciones = new List<Prelacion>();
            prelaciones.Add(prelacion1);
            prelaciones.Add(prelacion2);
            bool resp = fachada.InsertarMateriaSemestre(pensum, prelaciones);
            Assert.IsTrue(resp);

        }

        /// <summary>
        /// prueba del metodo en fachada insertarPrelacionDeMAteria
        /// </summary>
        [Test]
        public void PruebaInsertarPrelacionDeMAteria()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum pensum = new Pensum();
            Materia materia1 = new Materia();
            Materia materia2 = new Materia();
            Materia materia3 = new Materia();
            pensum.IdPensum = 1;
            materia1.Codigo = 11;
            materia2.Codigo = 12;
            materia3.Codigo = 1;
            List<Materia> prelaciones = new List<Materia>();
            prelaciones.Add(materia1);
            prelaciones.Add(materia2);
            bool resp = fachada.InsertarPrelacionesDeMateria(materia3,prelaciones,pensum);
            Assert.IsTrue(resp);

        }

        /// <summary>
        /// prueba del metodo en fachada insertarPrelacionDeMAteria
        /// </summary>
        [Test]
        public void PruebaEliminarPrelacionDeMateria()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum pensum = new Pensum();
            Materia materia1 = new Materia();
            Materia materia2 = new Materia();
            Materia materia3 = new Materia();
            pensum.IdEscuela = 1;
            materia1.Codigo = 10;
            materia2.Codigo = 11;
            materia3.Codigo = 15;
            List<Materia> prelaciones = new List<Materia>();
            prelaciones.Add(materia1);
            prelaciones.Add(materia2);
            bool resp = fachada.EliminarPrelacion(materia3, prelaciones, pensum);
            Assert.IsTrue(resp);
        }

        /// <summary>
        /// prueba del metodo en fachada ConsultarMateriasDeUnPensum
        /// </summary>
        [Test]
        public void PruebaEliminarMateriaDePensum()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum pensum = new Pensum();
            Materia materia1 = new Materia();
            Materia materia2 = new Materia();
            Materia materia3 = new Materia();
            pensum.IdEscuela = 1;
            materia1.Codigo = 10;
            materia2.Codigo = 11;
            materia3.Codigo = 15;
            List<Materia> prelaciones = new List<Materia>();
            prelaciones.Add(materia1);
            prelaciones.Add(materia2);
            bool resp = fachada.EliminarMateriaDePensum(prelaciones, pensum);
            Assert.IsTrue(resp);

        }

        [Test]
        public void PruebaEliminarPensumInactivo()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            int idPensum = 3;
            bool respuesta = fachada.EliminarPensumInactivo(idPensum);
            Assert.IsTrue(respuesta);
        }

        [Test]
        public void PruebaConsultarPensumActivo()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            Pensum pensumActivo = new Pensum();
            int idEscuela = 1;
            pensumActivo = fachada.ConsultarPensumActivo(idEscuela);
            Assert.IsInstanceOf(typeof(Pensum), pensumActivo);
            Assert.IsNotNull(pensumActivo);
            Assert.AreNotEqual(pensumActivo.IdPensum, 0);
        }

        [Test]
        public void PruebaArchivarPensum()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            int idPensum = 2;
            bool respuesta = fachada.ArchivarPensum(idPensum);
            Assert.IsTrue(respuesta);
        }

        [Test]
        public void PruebaActivarPensum()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            int idPensum = 1;
            int idPeriodo = 1;
            bool respuesta = fachada.ActivarPensum(idPensum, idPeriodo);
            Assert.IsTrue(respuesta);
        }

        [Test]
        public void PruebaConsultarPeriodoActual()
        {
            EnlaceLogico fachada = new EnlaceLogico();
            int periodo = fachada.ConsultarPeriodoActual();
            Assert.AreNotEqual(periodo, 0);

        }
       
    }
}